package edu.mercer.medapps.documentbldr;

/**
 * Use of Generic's to keep interface separate from this implementation.<p>
 * 
 * Allows usage of interface with other Builder, Data classes.<p>
 * 
 * Example:
 * <ul>
 *   <li>X = DocumentBuilder builder implementation
 *   <li>Z = DocumentProperties data class
 *   <li>Q = ValidFile file name validation class
 * </ul>
 * 
 * @param <X> - Builder provides partial Document under construction
 * @param <Z> - Properties provides access to partial Document values as single 
 * 	data object, and as part of created/built Document instance
 * @param <Q> - Filename as String, or other object with suitable toString() 
 * 	such as a validation class
 *
 * @see Document
 */

interface DocumentCreation<X,Z,Q> extends Document<Z>
{
	/**
	 * Sets name/title property.
	 * 
	 * @param nameIn - String nameIn, not null
	 * 
	 * @return Generic; i.e., DocumentBuilder
	 */
	
	X name( String nameIn );
	
	/**
	 * Sets filename property.<p>
	 * 
	 * @param - Generic fileNameIn, not null
	 *  
	 * @return Generic; i.e., DocumentBuilder
	 * 
	 * @see ValidFile
	 */
	
	X fromFile( Q fileNameIn );


	/**
	 * Sets filename property.<p>
	 * 
	 * @param - String fileNameIn, not null
	 *  
	 * @return Generic; i.e., DocumentBuilder
	 * 
	 * @see ValidFile
	 */
	
	X fromFile( String fileNameIn );

	
	/**
	 * Create new Document instance.<p>
	 * 
	 * @param Generic - type of Document implementation instance to build
	 * 
	 * @return Document&#60;Generic&#62; - Document instance with properties 
	 * object supplied from builder object
	 */
	
	Document<Z> build();
	
	
}//interface
